#ifndef __M_UTIL_H__
#define __M_UTIL_H__
/*
    通用功能类，与业务无关的功能实现
        1. 获取系统时间
        2. 获取文件大小
        3. 创建目录
        4. 获取文件所在目录
*/

#include <iostream>
#include <ctime>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

namespace bitlog
{
    namespace util
    {
        class Date
        {
        public:
            static size_t now()
            {
                return (size_t)time(nullptr);
            }
        };
        class File
        {
        public:
            static bool exists(const std::string &pathname)//@@@@@@@@@@@@@@@@@@@@@@@@
            {
                struct stat st;//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                if (stat(pathname.c_str(), &st) < 0)
                {
                    return false;
                }
                return true;
                // return (access(pathname.c_str(),F_OK)==0);linux下可用
            }
            static std::string path(const std::string &pathname)
            {
                size_t pos = pathname.find_last_of("/\\");
                if (pos == std::string::npos)
                    return ".";
                return pathname.substr(0, pos + 1); // 包含斜杠
            }
            static void createDirectory(const std::string &pathname)//@@@@@@@@@@@@@@@@@@
            {
                //./abc/bcd/a.txt
                size_t pos = 0, idx = 0;

                while (idx < pathname.size())
                {
                    pos = pathname.find_first_of("/\\", idx);//从idx开始查找第一个出现的/或\ 
                    if (pos == std::string::npos)
                    {
                        mkdir(pathname.c_str(), 0777); // 没找到/\\,说明在当前目录创建
                    }
                    std::string parent_dir = pathname.substr(0, pos+ 1);
                    // if(parent_dir=="."||parent_dir=="..") {idx=pos+1;continue;}
                    if (exists(parent_dir) == true)
                    {
                        idx = pos + 1;
                        continue;
                    }
                    mkdir(parent_dir.c_str(), 0777);
                    idx = pos + 1;
                }
            }
        };
    }
}

#endif